
#include "stm32f10x.h"
#include "delay.h"

#define SRC_LED1_OFF GPIO_SetBits  (GPIOE,GPIO_Pin_5);
#define SRC_LED1_ON  GPIO_ResetBits(GPIOE,GPIO_Pin_5);
#define SRC_LED2_OFF GPIO_SetBits  (GPIOE,GPIO_Pin_6);
#define SRC_LED2_ON  GPIO_ResetBits(GPIOE,GPIO_Pin_6);

#define LED1_OFF GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_RESET);
#define LED1_ON  GPIO_WriteBit(GPIOA,GPIO_Pin_1,Bit_SET);
#define LED2_OFF GPIO_WriteBit(GPIOA,GPIO_Pin_2,Bit_RESET);
#define LED2_ON  GPIO_WriteBit(GPIOA,GPIO_Pin_2,Bit_SET);
#define LED3_OFF GPIO_WriteBit(GPIOA,GPIO_Pin_3,Bit_RESET);
#define LED3_ON  GPIO_WriteBit(GPIOA,GPIO_Pin_3,Bit_SET);
#define LED4_OFF GPIO_WriteBit(GPIOA,GPIO_Pin_4,Bit_RESET);
#define LED4_ON  GPIO_WriteBit(GPIOA,GPIO_Pin_4,Bit_SET);
#define LED5_OFF GPIO_WriteBit(GPIOA,GPIO_Pin_5,Bit_RESET);
#define LED5_ON  GPIO_WriteBit(GPIOA,GPIO_Pin_5,Bit_SET);
#define LED6_OFF GPIO_WriteBit(GPIOA,GPIO_Pin_6,Bit_RESET);
#define LED6_ON  GPIO_WriteBit(GPIOA,GPIO_Pin_6,Bit_SET);
#define LED7_OFF GPIO_WriteBit(GPIOA,GPIO_Pin_7,Bit_RESET);
#define LED7_ON  GPIO_WriteBit(GPIOA,GPIO_Pin_7,Bit_SET);
#define LED8_OFF GPIO_WriteBit(GPIOA,GPIO_Pin_8,Bit_RESET);
#define LED8_ON  GPIO_WriteBit(GPIOA,GPIO_Pin_8,Bit_SET);


int main(void)
{
    u8 i;
    GPIO_InitTypeDef def1;

    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOE, ENABLE);
    RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE);

    def1.GPIO_Pin = GPIO_Pin_6 | GPIO_Pin_5;
    def1.GPIO_Mode = GPIO_Mode_Out_PP;
    def1.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOE, &def1);

    def1.GPIO_Pin = GPIO_Pin_1 | GPIO_Pin_2 | GPIO_Pin_3 | GPIO_Pin_4 | GPIO_Pin_5 | GPIO_Pin_6 | GPIO_Pin_7 | GPIO_Pin_8;
    def1.GPIO_Mode = GPIO_Mode_Out_PP;
    def1.GPIO_Speed = GPIO_Speed_50MHz;

    GPIO_Init(GPIOA, &def1);

    for(i = 0; i < 5; i++)
    {
        SRC_LED2_OFF;
        SRC_LED1_ON;
        Delay_Ms(60);

        SRC_LED1_OFF;
        SRC_LED2_ON;
        Delay_Ms(60);
    }

    /* Infinite loop */
    while (1)
    {
        LED1_OFF; Delay_Ms(150);
        LED1_ON;  Delay_Ms(150);
        
        LED2_OFF; Delay_Ms(150);
        LED2_ON;  Delay_Ms(150);
        
        LED3_OFF; Delay_Ms(150);
        LED3_ON;  Delay_Ms(150);
        
        LED4_OFF; Delay_Ms(150);
        LED4_ON;  Delay_Ms(150);
        
        LED5_OFF; Delay_Ms(150);
        LED5_ON;  Delay_Ms(150);
        
        LED6_OFF; Delay_Ms(150);
        LED6_ON;  Delay_Ms(150);
        
        LED7_OFF; Delay_Ms(150);
        LED7_ON;  Delay_Ms(150);
        
        LED8_OFF; Delay_Ms(150);
        LED8_ON;  Delay_Ms(150);
    }
}


#ifdef  USE_FULL_ASSERT

/**
  * @brief  Reports the name of the source file and the source line number
  *         where the assert_param error has occurred.
  * @param  file: pointer to the source file name
  * @param  line: assert_param error line source number
  * @retval None
  */
void assert_failed(uint8_t *file, uint32_t line)
{
    /* User can add his own implementation to report the file name and line number,
       ex: printf("Wrong parameters value: file %s on line %d\r\n", file, line) */

    /* Infinite loop */
    while (1)
    {
    }
}
#endif
